class Watcher {
  constructor(vm,key,cb){
    this.vm = vm
    this.key = key
    this.cb = cb // 通过不同的data，改变更新视图方式也不一样，用回调
    this.oldVal = this.getOldVal()
  }

  update(){
    const newVal = complieUtil.getVal(this.key,this.vm)
    if(newVal === this.oldVal) return
    this.cb(newVal)
  }

  getOldVal(){
    // 把watcher实例记录到Dep的静态属性target上
    Dep.target = this
    // 这里是属性访问，也会触发Observer2中data劫持中的get方法
    const oldVal = complieUtil.getVal(this.key,this.vm)
    // 添加到dep后，防止重复添加
    Dep.target = null
    return oldVal
  }

}